home *** CD-ROM | disk | FTP | other *** search
/ Programming Sound Cards / Programming Sound Cards.iso / sound_64 / sb.h < prev    next >
C/C++ Source or Header  |  1995-01-01  |  4KB  |  141 lines

  1. /* Include file for Soundblaster library */
  2.  
  3. /* Defines for Soundblaster and Soundblaster Pro IO address */
  4. #define LEFT_FM_STATUS      0x00    /* Pro only */
  5. #define LEFT_FM_ADDRESS     0x00    /* Pro only */
  6. #define LEFT_FM_DATA        0x01    /* Pro only */
  7. #define RIGHT_FM_STATUS     0x02    /* Pro only */
  8. #define RIGHT_FM_ADDRESS    0x02    /* Pro only */
  9. #define RIGHT_FM_DATA       0x03    /* Pro only */
  10. #define MIXER_ADDRESS       0x04    /* Pro only */
  11. #define MIXER_DATA          0x05    /* Pro only */
  12. #define DSP_RESET           0x06
  13. #define FM_STATUS           0x08
  14. #define FM_ADDRESS          0x08
  15. #define FM_DATA             0x09
  16. #define DSP_READ_DATA       0x0A
  17. #define DSP_WRITE_DATA      0x0C
  18. #define DSP_WRITE_STATUS    0x0C
  19. #define DSP_DATA_AVAIL      0x0E
  20. #define CD_ROM_DATA         0x10    /* Pro only */
  21. #define CD_ROM_STATUS       0x11    /* Pro only */
  22. #define CD_ROM_RESET        0x12    /* Pro only */
  23. #define CD_ROM_ENABLE       0x13    /* Pro only */
  24.  
  25. #define ADLIB_FM_STATUS     0x388
  26. #define ADLIB_FM_ADDRESS    0x388
  27. #define ADLIB_FM_DATA       0x389
  28.  
  29. /* Defines for 8237 DMA Controller IO addresses */
  30. #define DMA         0x00
  31. #define CH0_BASE    DMA+0
  32. #define CH0_COUNT   DMA+1
  33. #define CH1_BASE    DMA+2
  34. #define CH1_COUNT   DMA+3
  35. #define CH2_BASE    DMA+4
  36. #define CH2_COUNT   DMA+5
  37. #define CH3_BASE    DMA+6
  38. #define CH3_COUNT   DMA+7
  39. #define DMA_STATUS  DMA+8
  40. #define DMA_CMD     DMA+8
  41. #define DMA_REQUEST DMA+9
  42. #define DMA_MASK    DMA+10
  43. #define DMA_MODE    DMA+11
  44. #define DMA_FF      DMA+12
  45. #define DMA_TMP     DMA+13
  46. #define DMA_CLEAR   DMA+13
  47. #define DMA_CLRMSK  DMA+14
  48. #define DMA_WRMSK   DMA+15
  49. #define DMAPAGE     0x80
  50.  
  51. /* Types of Soundblaster Cards */
  52. #define SB15    1
  53. #define SBPro    2
  54. #define SB20    3
  55.  
  56. /* DSP Commands */
  57. #define DIRECT_8_BIT_DAC    0x10
  58. #define DMA_8_BIT_DAC        0x14
  59. #define DMA_2_BIT_DAC        0x16
  60. #define DMA_2_BIT_REF_DAC   0x17
  61. #define DIRECT_ADC        0x20
  62. #define DMA_ADC         0x24
  63. #define MIDI_READ_POLL        0x30
  64. #define MIDI_READ_IRQ        0x31
  65. #define MIDI_WRITE_POLL     0x38
  66. #define TIME_CONSTANT        0x40
  67. #define DMA_4_BIT_DAC        0x74
  68. #define DMA_4_BIT_REF_DAC   0x75
  69. #define DMA_26_BIT_DAC        0x76
  70. #define DMA_26_BIT_REF_DAC  0x77
  71. #define HALT_DMA        0xD0
  72. #define CONTINUE_DMA        0xD4
  73. #define SPEAKER_ON        0xD1
  74. #define SPEAKER_OFF        0xD3
  75. #define DSP_ID            0xE0
  76. #define DSP_VER         0xE1
  77. #define MDAC1            0x61
  78. #define MDAC2            0x62
  79. #define MDAC3            0x63
  80. #define MDAC4            0x64
  81. #define MDAC5            0x65
  82. #define MDAC6            0x66
  83. #define MDAC7            0x67
  84.  
  85. /* Functions that are in the library */
  86. int Sb_Init(void);
  87. int Sb_Get_Params(void);
  88. void Sb_Sample_Rate(unsigned rate);
  89. void Sb_Voice(int state);
  90. void Sb_OutVoice_DMA(char far *data, unsigned dlen, int stereo);
  91. void Sb_Init_Voice_DMA(void interrupt (*handler)(void));
  92. void Sb_DeInit_Voice_DMA(void);
  93. int Sb_DMA_Complete(void);
  94. void Sb_Halt_DMA(void);
  95. void Sb_Continue_DMA(void);
  96.  
  97. /* DMA routines */
  98. int far dma_reset(int Channel);
  99. int far dma_setup(int Channel,char far *Buffer,unsigned Length,int Dir);
  100. int far dma_done(int Channel);
  101.  
  102. extern int far dma_errno;
  103. extern char far *dma_errlist[];
  104.  
  105. /* Card parameters */
  106. extern unsigned SbIOaddr;
  107. extern unsigned SbIRQ;
  108. extern unsigned SbDMAchan;
  109. extern int    SbType;
  110.  
  111.  
  112. /* Define a useful macro for writing data to the DAC */
  113. #define writedac(x) { while(inportb(SbIOaddr+DSP_WRITE_STATUS) & 0x80); \
  114.                       outportb(SbIOaddr+DSP_WRITE_DATA,(x)); }
  115.  
  116. /* Write a byte to the SB Pro mixer chip */
  117. #define writemixer(x,y) { outportb(SbIOaddr+MIXER_ADDRESS,(x)); \
  118.               outportb(SbIOaddr+MIXER_DATA,(y)); }
  119.  
  120. /* FM Instrument definition */
  121. typedef struct {
  122.     unsigned char SoundCharacteristic[2];
  123.     unsigned char Level[2];
  124.     unsigned char AttackDecay[2];
  125.     unsigned char SustainRelease[2];
  126.     unsigned char WaveSelect[2];
  127.     unsigned char Feedback;
  128.     unsigned char filler[6];
  129. } FM_Instrument;
  130.  
  131. /* FM sound routines */
  132. void Sb_FM_Reset(void);
  133. void Sb_FM_Key_Off(int voice);
  134. void Sb_FM_Key_On(int voice, int freq, int octave);
  135. void Sb_FM_Voice_Volume(int voice, int vol);
  136. void Sb_FM_Set_Voice(int voice_num, FM_Instrument *ins);
  137.  
  138. /* MIDI routines */
  139. int Sb_Read_MIDI(void);
  140. void Sb_Write_MIDI(int data);
  141.